// 将 Blob 转换为 Base64 编码字符串
export function blobToBase64(blob: Blob): Promise<string> {
  return new Promise((resolve, reject) => {
    // 创建 FileReader 实例
    const reader = new FileReader();

    // 读取失败时触发
    reader.onerror = () => {
      reader.abort();
      reject(new Error('Blob 转换 Base64 失败'));
    };

    // 读取完成时触发（result 属性即为 Base64 字符串）
    reader.onloadend = () => {
      // 结果格式为 "data:[mimeType];base64,xxxx..."，直接返回完整字符串
      if (typeof reader.result === 'string') {
        resolve(reader.result);
      } else {
        reject(new Error('Blob 转换 Base64 失败'))
      }
    };

    // 以 DataURL 形式读取 Blob（自动编码为 Base64）
    reader.readAsDataURL(blob);
  });
}

export function tocSort(arr: string[]) {
  return arr.sort((a, b) => {
    // 优先处理封面图片
    const isCoverA = a.toLowerCase().includes('cover');
    const isCoverB = b.toLowerCase().includes('cover');

    if (isCoverA && isCoverB) return a.localeCompare(b);
    if (isCoverA) return -1;
    if (isCoverB) return 1;

    // 提取文件名中的数字进行排序
    const extractNumbers = (str: string): number[] => {
      const matches = str.match(/\d+/g);
      return matches ? matches.map(Number) : [];
    };

    const numsA = extractNumbers(a);
    const numsB = extractNumbers(b);

    // 如果都有数字，按数字顺序排序
    if (numsA.length > 0 && numsB.length > 0) {
      // 比较第一个数字
      if (numsA[0] !== numsB[0]) {
        return numsA[0] - numsB[0];
      }
      // 如果第一个数字相同，比较第二个数字（如果有）
      if (numsA.length > 1 && numsB.length > 1 && numsA[1] !== numsB[1]) {
        return numsA[1] - numsB[1];
      }
      // 如果数字相同，按字母顺序排序
      return a.localeCompare(b);
    }

    // 如果只有a有数字，a排在前面
    if (numsA.length > 0) return -1;
    // 如果只有b有数字，b排在前面
    if (numsB.length > 0) return 1;

    // 都没有数字，按字母顺序排序
    return a.localeCompare(b);
  });
}
